package cn.com.elite;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class test1 {
 /**
  * 获取SOAP的请求头，并替换其中的标志符号为用户输入的城市
  * 
  * 编写者：王景辉
  * 
  * @param city
  *            用户输入的城市名称
  * @return 客户将要发送给服务器的SOAP请求
  */
 private static String getSoapRequest(String city) {
  StringBuilder sb = new StringBuilder();
  sb
    .append("<?xml version=\"1.0\" encoding=\"utf-8\"?>"
      + "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" "
      + "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" "
      + "xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"
      + "<soap:Body>    <getWeatherbyCityName xmlns=\"http://WebXml.com.cn/\">"
      + "<theCityName>" + city
      + "</theCityName>    </getWeatherbyCityName>"
      + "</soap:Body></soap:Envelope>");
  return sb.toString();
 }
 /**
  * 用户把SOAP请求发送给服务器端，并返回服务器点返回的输入流
  * 
  * 编写者：王景辉
  * 
  * @param city
  *            用户输入的城市名称
  * @return 服务器端返回的输入流，供客户端读取
  * @throws Exception
  */
 private static InputStream getSoapInputStream(String city) throws Exception {
  try {
   String soap = getSoapRequest(city);
   if (soap == null) {
    return null;
   }
   URL url = new URL(
     "http://www.webxml.com.cn/WebServices/WeatherWebService.asmx");
   URLConnection conn = url.openConnection();
   conn.setUseCaches(false);
   conn.setDoInput(true);
   conn.setDoOutput(true);
   conn.setRequestProperty("Content-Length", Integer.toString(soap
     .length()));
   conn.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
   conn.setRequestProperty("SOAPAction",
     "http://WebXml.com.cn/getWeatherbyCityName");
   OutputStream os = conn.getOutputStream();
   OutputStreamWriter osw = new OutputStreamWriter(os, "utf-8");
   osw.write(soap);
   osw.flush();
   osw.close();
   InputStream is = conn.getInputStream();
   return is;
  } catch (Exception e) {
   e.printStackTrace();
   return null;
  }
 }
 /**
  * 对服务器端返回的XML进行解析
  * 
  * 编写者：王景辉
  * 
  * @param city
  *            用户输入的城市名称
  * @return 字符串 用,分割
  */
 public static String getWeather(String city) {
  try {
   Document doc;
   DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
   dbf.setNamespaceAware(true);
   DocumentBuilder db = dbf.newDocumentBuilder();
   InputStream is = getSoapInputStream(city);
   System.out.println("c:"+inputStream2String(is));
   doc = db.parse(is);
   NodeList nl = doc.getElementsByTagName("string");
   StringBuffer sb = new StringBuffer();
   for (int count = 0; count < nl.getLength(); count++) {
    Node n = nl.item(count);
    if(n.getFirstChild().getNodeValue().equals("查询结果为空！")) {
     sb = new StringBuffer("#") ;
     break ;
    }
    sb.append(n.getFirstChild().getNodeValue() + "#\n");
   }
   is.close();
   return sb.toString();
  } catch (Exception e) {
   e.printStackTrace();
   return null;
  }
 }
 public static String inputStream2String(InputStream is) throws IOException{
	   BufferedReader in = new BufferedReader(new InputStreamReader(is));
	   StringBuffer buffer = new StringBuffer();
	   String line = "";
	   while ((line = in.readLine()) != null){
	     buffer.append(line);
	   }
	   String clob =  new String(buffer.toString().getBytes("gbk"),"utf-8"); 
	   return clob;
	}
 /**
  * 测试用
  * @param args
  * @throws Exception
  */
 public static InputStream String2InputStream(String str){
	   ByteArrayInputStream stream = new ByteArrayInputStream(str.getBytes());
	   return stream;
	}
 public static void test() throws ParserConfigurationException, SAXException, IOException{
	 String a="<?xml version='1.0' encoding='utf-8'?><soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema'><soap:Body><CreateAndUpdateCustomerResponse xmlns='http://tempuri.org/'><CreateAndUpdateCustomerResult>-2</CreateAndUpdateCustomerResult></CreateAndUpdateCustomerResponse></soap:Body></soap:Envelope> ";
	 Document doc;
	   DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
	   dbf.setNamespaceAware(true);
	   DocumentBuilder db = dbf.newDocumentBuilder();
	 InputStream is = String2InputStream(a);
	 doc = db.parse(is);
	   NodeList nl = doc.getElementsByTagName("CreateAndUpdateCustomerResult");
	   StringBuffer sb = new StringBuffer();
	   for (int count = 0; count < nl.getLength(); count++) {
	    Node n = nl.item(count);
//	    if(n.getFirstChild().getNodeValue().equals("查询结果为空！")){
//	     sb = new StringBuffer("#") ;
//	     break ;
//	    }
	    sb.append(n.getFirstChild().getNodeValue());
	   }
	   try {
		is.close();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	   System.out.println("a:"+sb.toString());
	 
 }
 public static void main(String[] args) throws Exception {
	 test();
//  System.out.println("a:"+getWeather("长沙"));
//  System.out.println("b:"+"po&oi".split("&").length) ;
//  System.out.println("c:"+"##".split("#").length) ;
 }
}